Skip to content

Conversation

@Moonia-Cherry
Copy link

描述

  • 我超喜欢这个视奸页面!(bushi

  • 然鹅发现此项目并没有内置历史数据存储功能,于是基于个人数据分析兴趣,增加了存储设备使用情况到SQLite的功能,数据库表与字段将在下面列出;

  • 因为我在使用ManicTime记录pc的日常生活时间,而此软件可以以自定义网络源新增时间轴,本质上是一个返回xmlget请求,时间轴根据获取的xml生成时间轴,结合上述已存储好的数据,即可将数据在时间轴上可视化了,在我的使用中,这主要针对于手机,但我预留了其它设备的数据存储与读取(用设备标识符区分)。

    下图为样例,其中PhoneUsage为读取到的数据
    样例 - 其中PhoneUsage为读取到的数据

  • 新增的api也将在下面列出;

表结构

表名 作用
Events 记录每次设备使用状态的改变
ColorGroup 记录每种使用状态所属组,用于显示颜色

Events

  • 事件记录表
  • 在一次app_name改变了的/device/set接口被调用时,插入一行
字段名 类型 是否可空 默认值 说明
id INTEGER 自增 主键(自增)
device_id TEXT 设备标识符(必填)
show_name TEXT 显示名称(可选)
app_name TEXT 应用程序名称(必填)
using BOOLEAN 使用状态(必填,布尔值)
start_time DATETIME 事件开始时间(必填)

ColorGroup

  • 颜色分组表
  • Events表插入行时,若插入的app_name在此表group_name字段的所有行中均没有,则插入一行
字段名 类型 是否可空 默认值 说明
id INTEGER 自增 主键(自增)
group_name TEXT 分组名称(必填)
color_hex TEXT '#a0ad9e' 颜色十六进制代码,随机生成(必填)
set INTEGER 0 是否为自行设置(可选)
  • set字段在代码内目前还没有相关逻辑;预期是加入设置组颜色接口,在调用时将set设置为1,此为预留字段

api

ManicTime

/sampleData/CustomTimeline?id=<id>&FromTime=2025-04-07T04:00:00&ToTime=2025-04-08T04:00:00

获取ManicTime自定义网络源要求的xml

  • Method: GET
  • 无需鉴权

Tip

本接口由ManicTime软件自动调用,软件内设置时,只需设置到.../sampleData/CustomTimeline?id=<id>即可

Params

  • <id>: 设备标识符
  • <FromTime>:要获取的数据的开始时间,格式为%Y-%m-%dT%H:%M:%S
  • <ToTime>:要获取的数据的结束时间,格式为%Y-%m-%dT%H:%M:%S

Response

<Timeline>
  <Color>#bacf9c</Color> <!-- 默认颜色 -->
    <Activities>
      <!-- 活动,每个活动对应时间轴上的一个区间 -->
      <Activity>
        <GroupId>1</GroupId>
        <!-- 此活动所属组,用于指定颜色 -->
        <DisplayName>未在使用</DisplayName>
        <StartTime>2025-04-07T02:14:50+08:00</StartTime>
        <!-- 区间开始时间 -->
        <EndTime>2025-04-07T08:49:20+08:00</EndTime>
        <!-- 区间结束时间 -->
      </Activity>
      <Activity>
        <GroupId>2</GroupId>
        <DisplayName>微信</DisplayName>
        <StartTime>2025-04-07T08:49:20+08:00</StartTime>
        <EndTime>2025-04-07T08:52:27+08:00</EndTime>
      </Activity>
      <!-- 以此类推 -->
    </Activities>
    <Groups>
      <!-- 组,每个组对应一个颜色 -->
      <Group>
        <GroupId>1</GroupId>
        <Color>#E6E6E6</Color>
        <DisplayName>未在使用</DisplayName>
      </Group>
      <Group>
        <GroupId>2</GroupId>
        <Color>#2FDB72</Color>
        <DisplayName>微信</DisplayName>
      </Group>
      <!-- 以此类推 -->
  </Groups>
</Timeline>

@vercel

This comment was marked as off-topic.

@wyf9 wyf9 self-assigned this Apr 9, 2025
@wyf9
Copy link
Member

wyf9 commented Apr 9, 2025

  1. 我在想 /sampleData/CustomTimeline 这个 api 需不需要加上鉴权,因为如果被大量请求可能会有性能影响
  2. 其实我很早之前就有统计使用数据的想法了,但是有一个问题:电脑端的窗口标题不是固定的,比如 Discord 的窗口标题为 #频道名 | 服务器名 - Discord,会不会影响统计

@Moonia-Cherry
Copy link
Author

  1. 我在想 /sampleData/CustomTimeline 这个 api 需不需要加上鉴权,因为如果被大量请求可能会有性能影响
  2. 其实我很早之前就有统计使用数据的想法了,但是有一个问题:电脑端的窗口标题不是固定的,比如 Discord 的窗口标题为 #频道名 | 服务器名 - Discord,会不会影响统计
  1. 完全可以加上的╰(°▽°)╯也是只需要在软件内设置时设置到.../sampleData/CustomTimeline?id=<id>&secret=<secret>即可,已经有require_secret装饰器了,所以很容易改
  2. 确实会影响,这是我的设计缺陷,因为我总假定app_name唯一,于是两个表的关联是采用app_name而非id外键;更好的做法是在Events加一个外键,标记对应ColorGroupid,按id寻找而非app_name(或者反之),在ColorGroupapp_name(存储实际应用名称)不变的情况下,Eventsapp_name可以变成实际的窗口标题了,实际上ManicTime的xml格式本身设计就是期望<DisplayName>是一个“实际活动”的。下为样例:
          <Activity>
            <GroupId>2</GroupId>
            <DisplayName>微信 - 假设活动</DisplayName> <!-- 修改“微信”为“微信 - 假设活动” -->
            <StartTime>2025-04-07T08:49:20+08:00</StartTime>
            <EndTime>2025-04-07T08:52:27+08:00</EndTime>
          </Activity>
    可以看到,在时间轴上悬停时,将同时呈现组和标题;
    image
    时间轴下方的详细展示部分,左侧显示标题,右侧显示组;
    image

@wyf9
Copy link
Member

wyf9 commented Apr 13, 2025

想了想,如果直接 commit 可能有很多人不需要这个功能,而且代码会很乱
所以我决定等 plugin 整出来之后再合并,抱歉(

upd: 快期中了,所以... 还得推(

@Moonia-Cherry
Copy link
Author

想了想,如果直接 commit 可能有很多人不需要这个功能,而且代码会很乱 所以我决定等 plugin 整出来之后再合并,抱歉(

均可,由你决定😉若有相关需要随时欢迎再来contact me

(以及,我其实也是看到了那个智学网和steam这两个附加功能才决定直接提pr的,以为是一个聚合的仓库

@ntkrnl32
Copy link
Member

  1. 我在想 /sampleData/CustomTimeline 这个 api 需不需要加上鉴权,因为如果被大量请求可能会有性能影响
  2. 其实我很早之前就有统计使用数据的想法了,但是有一个问题:电脑端的窗口标题不是固定的,比如 Discord 的窗口标题为 #频道名 | 服务器名 - Discord,会不会影响统计

影响统计的话...加一个应用 ID?
例如 QQ 的 ID 可以是 WIN_QQ_EXE
或者干脆把 win linux 下的可执行文件路径发过去得了

@wyf9 wyf9 moved this to Todo in Sleepy Autumn Update Jun 13, 2025
@wyf9 wyf9 changed the title 支持将设备使用状态存储到SQLite,并提供ManicTime时间线xml接口 [Waiting for Plugin] 支持将设备使用状态存储到SQLite,并提供ManicTime时间线xml接口 Jun 13, 2025
@ntkrnl32
Copy link
Member

ntkrnl32 commented Sep 2, 2025

still not available lol

@wyf9
Copy link
Member

wyf9 commented Sep 2, 2025

😭😭😭

@wyf9 wyf9 changed the title [Waiting for Plugin] 支持将设备使用状态存储到SQLite,并提供ManicTime时间线xml接口 [Waiting for fastapi-dev] 支持将设备使用状态存储到SQLite,并提供ManicTime时间线xml接口 Sep 7, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

3 participants